473,416 Members | 1,628 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,416 software developers and data experts.

ls files --> list packer

I would like to use the power of Python to build some list structures
for me.

Namely i have organized a bunch of folders that have soundfiles in them
and would like Python to slurp up all the .aif/.aiff (or .wav whatever)
files in a given set of directories. My friend hacked up this is perl:

$files = `ls /snd/Public/*.aiff`;

@snd_filelist = split('\n',$files);

$i = 0;
while ($file = @snd_filelist[$i]) {
print "file $i = @snd_filelist[$i]\n";
$i++;
}
The only catch with the above code (besides its hideousness hee hee) is
if you have a directory w/i the structure, but in general it works and
with this i can just put gobs of files into separate dirs pack them
into a list and then send them to my script that scrambles them and
plays them.

I would like something similar, that works with python that is more
elegant and maybe even more robust.

but i am failing miserably and my perl friends mock me.

cheers,
kp8

Feb 24 '06 #1
14 2895
and one example of a slightly fancier version would be a variation that
looks recursively into subdirectories and makes separate lists for each
subdirectory encountered.

so if i had a directory called "~/snd/"

and in "~/snd/" i had:

"~/snd/one/"
"~/snd/two/"
"~/snd/three/"

each with soundfiles in it.

I could get those packed in three separate lists named after the
directory or some such thing....

This would be so awesome because my carefully organizing your
directory, you would be carefully
organizing your data, change your dir structure or add/delete some
files and you would get a new structure in your script... prolly would
work with scripting your iTunes music folder too...

gosh ... sorry ... just thinking out-loud here and getting kind of
giddy! reaching for the python book ...

Feb 24 '06 #2
I V

kpp9c wrote:
Namely i have organized a bunch of folders that have soundfiles in them
and would like Python to slurp up all the .aif/.aiff (or .wav whatever)
files in a given set of directories. My friend hacked up this is perl:

$files = `ls /snd/Public/*.aiff`;
You could use posix.popen to duplicate the perl hack:

files = posix.popen('ls /snd/Public/*.aiff').read().strip()
@snd_filelist = split('\n',$files);
snd_filelist = files.split('\n')
I would like something similar, that works with python that is more
elegant and maybe even more robust.
Lucklily, python lets you avoid this kind of horrible hack. Try
os.listdir:

snd_filelist = [f for f in os.listdir('/snd/Public/') if
f.endswith('.aiff')]

I think it's more elegant, and it's certainly more robust.
but i am failing miserably and my perl friends mock me.


Now you get to mock your perl friends!

Feb 24 '06 #3
cool i just tried:
import os
snd_filelist = [f for f in os.listdir('/Users/foo/snd') if f.endswith('.aif')]

and it worked! and will take a huge bite out of my big script ... which
i make by doing an ls
in the terminal and editing (boo hoo)

one one lc and one import!

cool..

that other sillyness i mentioned is not strickly required ... just
dreaming but i know involves some kind of os walk type thing prolly ...
meanwhile this is so exciting!

Thank you!!!!

Feb 24 '06 #4
gosh i could even use other string methods like startswith to take all
the files in a given directory which i have organized with a prefix and
have them stuffed in different lists ... i think ...

snd_filelist = [f for f in os.listdir('/Users/foo/snd') if
f.endswith('.aif') & f.startswith('r')]

\m/ (>.<) \m/

yeah!

runnin' to the interpreta now...

Feb 24 '06 #5
I V wrote:
snd_filelist = [f for f in os.listdir('/snd/Public/') if
f.endswith('.aiff')]


Or even

from glob import glob

snd_filelist = glob('/snd/Public/*.aiff')

Jeremy

--
Jeremy Sanders
http://www.jeremysanders.net/
Feb 24 '06 #6
Try using The Path module:
http://www.jorendorff.com/articles/python/path/.

I wrote a little script to traverse a directory structure which you
could use. (You just pass a function to it and it runs it on each file
in the directory. You want it to run on each directory instead, so
I've changed it a little for you).

import path

def traverse(directory, function, depth=0, onfiles=True, ondirs=False):
thedir = path.path(directory)
if onfiles == True:
for item in thedir.files():
function(item, depth)
if ondirs == True:
for item in thedir.dirs():
function(item, depth)
for item in thedir.dirs():
traverse(item, function, depth+1, onfiles, ondirs)

You can use it like so:

def printaifs(thedir, depth):
print thedir.name
for item in thedir.files("*.aif'"):
print "\t" + item

traverse(r"/Users/foo/snd", printaifs, onfiles=False, ondirs=True)

NB: I've quickly adapted this whilst away from an installation of
Python, so it is untested, but should mostly work, unless there's a
typo.

Hope this helps at least a little...

Ed

PS The Python Tutor list tends to be a much better place to discuss
this kind of stuff. If you haven't yet encountered Kent and Alan's
help, then you have a joyous experience ahead of you.

Feb 24 '06 #7
kpp9c wrote:
that other sillyness i mentioned is not strickly required ... just
dreaming but i know involves some kind of os walk type thing prolly ...


os.walk isn't exactly rocket science... Something similar to this?
import os
for dir, dirs, files in os.walk('.'):

.... txt_files = [x for x in files if x.endswith('.txt')]
.... if txt_files:
.... print dir, txt_files
Feb 24 '06 #8
that is nice.... but the little further wrinkle, which i have no idea
how to do, would be to have the contents of each directory packed into
a different list.... since you have no idea before hand how many lists
you will need (how many subdirs you will enounter) ... well that is
where the hairy part comes in...

-kp--

Feb 24 '06 #9
os.listdir works great ... just one problem, it packs the filenames
only into a list... i need the full path and seach as i might i se NO
documentation on python.org for os.listdir()

how do i either grab the full path or append it later ...

Feb 27 '06 #10
kpp9c wrote:
os.listdir works great ... just one problem, it packs the filenames
only into a list... i need the full path and seach as i might i se NO
documentation on python.org for os.listdir()
Docs for os.listdir() are here:
http://docs.python.org/lib/os-file-dir.html

When all else fails try the index:
http://docs.python.org/lib/genindex.html
how do i either grab the full path or append it later ...


Use os.path.join():

base = '/some/useful/path'
for f in os.listdir(base):
full_path_to_file = os.path.join(base, f)

Kent
Feb 27 '06 #11
Thank you... i was looking in the wrong place cause all i found was
this relatively useless doc:

http://docs.python.org/lib/module-os.html

which says almost nothing.

Feb 27 '06 #12
nice! two little lines that do a boatload of work! hee hee

----
pth = '/Users/kpp9c/snd/01'
samples = [os.path.join(pth, f) for f in os.listdir(pth) if
f.endswith('.aif')]
----

thank you Kent! (and Jeremy and Magnus and Singletoned and I V ... and
john boy and mary ellen .. )

Feb 27 '06 #13
kpp9c wrote:
Thank you... i was looking in the wrong place cause all i found was
this relatively useless doc:
http://docs.python.org/lib/module-os.html
which says almost nothing.

In one of its subsections, cleverly named "Files and Directories",
I see a nice description of listdir.

http://docs.python.org/lib/os-file-dir.html

You also might want to read about os.walk in the same page.
In the os.path module you can see more path name manipulations.
If you intend to know a language, you should read its manuals
fast; what you want is a vague impression where information
lives and what information is there. Maybe half a year later
do it again. After that every couple of years often suffices.
At the very least, go through the full tutorial, read docs on
the "obvious" modules for everyone and for your particular
area of endeavor, and then on a snacking basis get yourself
through the rest unless you decide that you never want to deal
with, for example, unix-specific services or internet protocols.

Don't expect to acquire _any_ language with "just in time" (JIT)
techniques. Perhaps JIT works for magic. When you acquire a
language with JIT, you miss the subtleties of the language.
You will be doomed to writing the same kinds of programs in every
language you touch ("writing Fortran in Algol" is what we used to
call it). I've worked on code that was Java-in-Python, and it was
frustratingly hard to understand.

--Scott David Daniels
sc***********@acm.org
Feb 27 '06 #14
kpp9c wrote:
that is nice.... but the little further wrinkle, which i have no idea
how to do, would be to have the contents of each directory packed into
a different list.... since you have no idea before hand how many lists
you will need (how many subdirs you will enounter) ... well that is
where the hairy part comes in...


What's the problem? If you'll get an unknown bundle of objects in a
program, you just put them in a container. A list or a dict will do
fine. Have a look at the Python tutorial.

You get a file list for each directory from os.walk. You either keep
a list called "directories" and for each turn in the loop, you do
"directories.append((dir, sound_files))", or you have a dict called
"directories", and do "directories[dir] = sound_files" in the loop.

Something like this untested code:

def isSoundFile(x):
# home work

dirs = {}
root = raw_input('start directory')
for dir, dummy, files in os.walk(root):
dirs[dir] = [x for x in files if isSoundFile(x)]

for dir in sorted(dirs):
print dir
for fn in dirs[dir]:
print "\t", fn
print
Feb 27 '06 #15

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

0
by: Grant Edwards | last post by:
Could whoever is gatewaying this group to a mailing list PLEASE fix whatever problem is causing Usenet posters to receive bounce messages and out-of-office messages from subscribers to your...
10
by: jamesthiele.usenet | last post by:
I wrote this little piece of code to get a list of relative paths of all files in or below the current directory (*NIX): walkList = , x) for x in os.walk(".")] filenames = for dir, files in...
8
by: dp | last post by:
Is there anyway to have the bullet color of a <li> be a different color than the text without using an image? dp
5
by: Konrad L. M. Rudolph | last post by:
I hope this is the right NG, please notify me if not. I have got a problem with the "recent files" list of the start page in VS.NET: yesterday I created a new projekt which has the same name as...
3
by: Michael | last post by:
X-Replace-Address Hello, I am trying to write a program at work for reading/writing files larger than 4 GB. I know that Windows supports files that big but I have not been able to get my...
3
by: Gregor Horvath | last post by:
Hi, given the dynamic nature of python I assume that there is an elegant solution for my problem, but I did not manage to find it. I have a file that contains for example on line: when...
4
by: VK | last post by:
I'm looking for autoexpand <select> list onfocus and collapse it back onselect/onblur (the list is select-one type) I know it is not possible directly, but I've seen here a hack by changing...
4
by: zacks | last post by:
Most applications whose purpose is to work with various types of files implement a "Most Recent Files" list, where the last, say, four files accessed by the application can quickly be re-opened by...
1
by: jollyguy77 | last post by:
Hi, I have just started to learn in .net. I want to show a list of filename along with the corresponding image (like pdf image for pdf files etc..). i will be getting the list of files from...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
0
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.